异地组网:Tailscale Subnat 在异地办公场景下的工程实践

九个办公点,如何异地组网实现设备统一监测?设备成本仅需110元/台,跨省延迟仅 22ms!低成本组网解决方案,实现快速部署与运维提效。

技术决策背景

随着公司规模逐渐扩大,我作为公司唯一的基础设施运维,需要支撑维护 9 个办公点的录像设备、NAS、打印机等设施。这些设备分散在不同城市,急需打通各个办公点的网络,将所有设施纳入统一监测和管控

作为一名业余运维,我对传统组网方案了解有限,只知道有 VPN、专线、SD-WAN、Tailscale、Zerotier One 几种方案。不过,经验不够 AI 来凑,DeepSeek 给出了详细的方案对比分析。

传统组网方案对比分析

方案类型 优势 劣势 适用场景
专线互联 <10ms延迟
99.99%可靠性
万元级月费
部署周期长
金融/医疗核心系统
IPsec VPN 厂商兼容性好 配置复杂
NAT穿透困难
少量固定站点互联
SD-WAN 智能选路
QoS保障
年费高昂
需要专用设备
跨国企业分支机构
Tailscale 零配置部署
按需计费
依赖公网质量 中小型多站点互联

恰好,我对 Tailscale 有着非常丰富的经验。几年前在南京时,我使用过 Zerotier OneTailscale 来支持影视项目的远程协作、远程剪辑、远程调色,对其简单的配置和极低的延迟印象深刻。

Tailscale 技术特点

Tailscale 是基于 WireGuard 内核构建的零配置组网工具,其核心技术突破体现在三大层面:

  • 智能NAT穿透:通过 STUN 协议自动建立 P2P 直连,当直连受阻时智能启用中继节点(DERP 服务器)
  • 身份联邦系统:集成 Google Workspace / Microsoft 365 等企业身份源,实现设备级 RBAC 控制
  • 动态路由管理:支持子网路由通告(Subnet Routing)和策略路由(Exit Node)

Tailscale vs Zerotier One

虽然 Zerotier One 也是一个不错的选择,但综合对比后,Tailscale 更适合我们的需求:

对比维度 Tailscale Zerotier One
免费设备数量 100台 10台
QNAP支持 官方维护套件 仅第三方套件
配置难度 极简,文档完善 相对复杂
Subnet配置 一键配置 需手动设置

综合来看,采用 Tailscale 组网,是我们现阶段成本最低、能快速上线、维护起来最简单的方案。

部署实战

设备选型

运行 Tailscale 只需要在每个办公点的子网中部署一台 Linux 服务器即可。如果不考虑外形,甚至还可以用树莓派。

我选用了戴尔 Wyse 3040 瘦客户机:

配置项 参数
处理器 Intel Atom x5-Z8350
内存 2GB DDR3L
存储 8GB eMMC
网络 千兆网口
价格 咸鱼二手 110元/台

戴尔 Wyse 3040 瘦客户机

系统定制

戴尔 Wyse 3040 瘦客户机预装的是 ThinOS 系统,需要改装为 Ubuntu Server。

准备工作

  1. 从 Ubuntu 官网下载 Ubuntu Server 24.04.1 LTS 镜像
  2. 使用 Ventoy 制作启动 U 盘

💡 系统版本选择建议

最好选用最新的 LTS 发行版,因为老旧版本可能找不到可用的国内软件镜像源。

解锁 BIOS

安装前需要先解锁 BIOS:

  1. 连接好鼠标键盘,开机时按 F2 进入 BIOS
  2. 点击页面下方的 🔒 图标
  3. 输入密码:Fireport
  4. 切换启动项为 U 盘启动

💡 额外配置建议

建议同时设置上电自动开机,这样在停电后恢复电力时,无需人工干预就能自动恢复运行。

安装系统

系统安装过程按照向导操作即可,需要注意以下几点:

  • 主机名设置:建议使用清晰简明的命名规则,如 <公司名>-gateway-<地点>
  • 安装介质移除:如果提示无法自动卸载安装媒体,拔掉 U 盘后按回车即可

配置 SSH 密钥登录

系统重启后进入终端,首先配置 SSH 密钥登录:

# 添加公钥
echo "你的公钥内容" >> ~/.ssh/authorized_keys

# 设置权限
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

测试 SSH 密钥登录成功后,禁用密码登录以提高安全性:

# 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config
# 找到 PasswordAuthentication 项目配置为 no

# 重启 SSH 服务
sudo systemctl restart sshd

# 更新系统软件包(可选)
sudo apt full-upgrade

# 重启系统
sudo reboot

Tailscale 安装与配置

安装必要工具

# 安装网络工具
sudo apt install -y net-tools

安装 Tailscale

根据 Tailscale 官方文档,执行一键安装脚本:

curl -fsSL https://tailscale.com/install.sh | sh

⚠️ 注意

由于 Tailscale 服务器在国外,安装过程可能较慢,需要耐心等待。

首次登录认证

安装完成后,执行启动命令:

sudo tailscale up

终端会输出一个认证网址,将此网址在浏览器中打开:

  1. 使用 Tailscale 账号登录验证
  2. 选择要加入的网络
  3. 管理控制台允许设备接入

Tailscale 设备管理界面

禁用密钥过期

对于长期运行的设备,建议在控制台中点击 Disable key expiry 关闭密钥过期功能。

💡 为什么要禁用密钥过期?

默认情况下,设备密钥会在 180 天后过期。密钥过期后,必须在客户端上重新登录才能继续使用。禁用后,设备名下方会出现 Expiry disabled 标识。

测试连接

使用另一台接入了 Tailscale 的设备测试连接:

PS C:\Users\admin> ping 100.***.***.***

正在 Ping 100.***.***.*** 具有 32 字节的数据:
来自 100.***.***.*** 的回复: 字节=32 时间=26ms TTL=64
来自 100.***.***.*** 的回复: 字节=32 时间=6ms TTL=64
来自 100.***.***.*** 的回复: 字节=32 时间=7ms TTL=64
来自 100.***.***.*** 的回复: 字节=32 时间=7ms TTL=64

100.***.***.*** 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 6ms,最长 = 26ms,平均 = 11ms

连接测试正常后,即可关机断电准备迁移。

设备迁移与部署

物流准备

将戴尔 Wyse 3040 瘦客户机与电源线、网线一起打包,寄送给目标办公点的同事。

现场安装

收到设备后,通过微信视频指导同事:

  1. 将设备安装到弱电箱中
  2. 插好电源和网线
  3. 等待设备自动启动

验证上线

设备启动后,尝试 Ping 测试:

ping 100.***.***.*** -t

正在 Ping 100.***.***.*** 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
来自 100.***.***.*** 的回复: 字节=32 时间=6ms TTL=64
来自 100.***.***.*** 的回复: 字节=32 时间=6ms TTL=64
来自 100.***.***.*** 的回复: 字节=32 时间=7ms TTL=64

等待设备回复后,建立 SSH 连接:

ssh ubuntu@example-gateway-01

配置 Subnet 路由

启用 IP 转发

将 Linux 设备用作子网路由器需要启用 IP 转发功能。参考 Tailscale 官方文档,首先验证配置目录:

ls -la /etc/sysctl.d

确认目录存在后,执行以下命令启用 IP 转发:

# 启用 IPv4 转发
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf

# 启用 IPv6 转发
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf

# 应用配置
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

确定子网网段

运行 ifconfig 查看网络配置:

ifconfig

enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.3  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 240e:****:****:****:****:****:****:****  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::****:****:****:****  prefixlen 64  scopeid 0x20<link>
        ether 54:**:**:**:**:**  txqueuelen 1000  (Ethernet)
        ...

根据输出信息:

  • IP:192.168.2.3
  • 子网掩码:255.255.255.0

可以确定该办公点的局域网网段为 192.168.2.0/24

公布子网路由

执行以下命令公布子网路由并接受其他子网的路由:

sudo tailscale up --accept-routes --advertise-routes=192.168.2.0/24

参数说明:

  • --advertise-routes:公布本地子网路由
  • --accept-routes:接受其他网关的子网路由,实现跨办公点互访

批准子网路由

前往 Tailscale 管理控制台,点击该设备,可以看到 Subnets - Awaiting Approval

等待批准的子网路由

点击 Edit,勾选要公开的子网路由后保存:

批准子网路由

验证 Subnet 连接

配置完成后,退出 SSH 连接,尝试 Ping 办公点 B 的路由器来验证子网连接:

ping 192.168.2.1 -t

正在 Ping 192.168.2.1 具有 32 字节的数据:
来自 192.168.2.1 的回复: 字节=32 时间=140ms TTL=63
来自 192.168.2.1 的回复: 字节=32 时间=7ms TTL=63
来自 192.168.2.1 的回复: 字节=32 时间=6ms TTL=63
来自 192.168.2.1 的回复: 字节=32 时间=6ms TTL=63
来自 192.168.2.1 的回复: 字节=32 时间=7ms TTL=63

至此,接入 Tailscale 的设备已经可以访问办公点 B 局域网中的任意设备了。只需对其他办公点如法炮制即可。

安全加固

配置访问控制策略(ACL)

在 Tailscale 管理控制台配置 ACL 策略,限制访问权限:

{
  "acls": [
    {
      "action": "accept",
      "src": ["group:engineering"],
      "dst": ["subnet:192.168.2.0/24:*"]
    }
  ]
}

配置防火墙

使用 UFW 配置防火墙规则:

# 允许 Tailscale 端口
sudo ufw allow 41641/udp

# 允许本地子网访问
sudo ufw allow from 192.168.2.0/24

# 启用防火墙
sudo ufw enable

注意事项

网络规划

子网网段规划

在部署前必须提前规划好各个办公点的网段,避免造成子网路由冲突。

示例规划:

办公点 网段 网关设备
总部(厦门) 192.168.1.0/24 gateway-xiamen
分部A(南京) 192.168.2.0/24 gateway-nanjing
分部B(上海) 192.168.3.0/24 gateway-shanghai
分部C(北京) 192.168.4.0/24 gateway-beijing

⚠️ 重要提示

如果办公点 A 使用了 192.168.1.0/24,其他办公点就不可再使用此网段,否则会导致路由冲突。

网络拓扑图

办公点C - 上海

办公点B - 南京

办公点A - 厦门

Tailscale 虚拟网络

Tailscale 隧道

Tailscale 隧道

Tailscale 隧道

Tailscale 协调服务器

Gateway 100.x.x.1
192.168.1.3

路由器 192.168.1.1

设备群 192.168.1.x

Gateway 100.x.x.2
192.168.2.3

路由器 192.168.2.1

设备群 192.168.2.x

Gateway 100.x.x.3
192.168.3.3

路由器 192.168.3.1

设备群 192.168.3.x

性能优化

延迟表现

在我的实践中,各办公点之间的延迟表现如下:

连接路径 运营商 平均延迟
厦门 ↔ 厦门 电信 ↔ 电信 <10ms
厦门 ↔ 南京 电信 ↔ 电信 ~22ms
厦门 ↔ 上海 电信 ↔ 电信 ~18ms

💡 性能基准

正常情况下,同一运营商使用 Tailscale 连接,延迟应该在 30ms 以内。

高延迟问题排查

如果遇到超过 100ms 的延迟,可能的原因和解决方案:

问题诊断流程:

延迟>100ms

是否使用WiFi?

改用有线连接

是否多层NAT?

尝试以下方案

检查运营商线路

启用IPv6

开启UPnP

光猫桥接模式

⚠️ 需配置防火墙

优化建议:

  1. 启用 IPv6

    • 在路由器开启 IPv6 功能
    • 为子网设备分发 IPv6 地址
    • IPv6 通常下发公网地址,不涉及 NAT
  2. 开启 UPnP

    • 在路由器管理界面启用 UPnP 功能
    • 帮助 Tailscale 自动完成端口映射
  3. 光猫桥接模式(高级方案)

    • 可以消除多层 NAT 问题
    • ⚠️ 必须自行配置防火墙,否则存在严重安全风险

成本分析

硬件成本

项目 单价 数量 小计
戴尔 Wyse 3040 ¥110 9台 ¥990
网线(5米) ¥10 9根 ¥90
物流费用 ¥15 9次 ¥135
合计 ¥1,215

软件成本

项目 费用 说明
Tailscale 个人版 ¥0 支持100台设备
Ubuntu Server ¥0 开源免费
合计 ¥0

对比传统方案

方案 初期投入 月度费用 年度总成本
Tailscale方案 ¥1,215 ¥0 ¥1,215
专线互联 ¥50,000+ ¥10,000+ ¥170,000+
SD-WAN ¥30,000+ ¥3,000+ ¥66,000+
IPsec VPN ¥20,000+ ¥500+ ¥26,000+

成本节约率:99.3%(相比专线方案)

方案总结

核心优势

1. 极低成本

  • 硬件成本仅 ¥110/台
  • 软件完全免费
  • 无月度费用

2. 快速部署

  • 单个节点部署时间 < 30分钟
  • 无需专业网络知识
  • 远程指导即可完成

3. 简单维护

  • 零配置自动组网
  • Web 界面统一管理
  • 密钥永不过期

4. 优秀性能

  • 同城延迟 < 10ms
  • 跨省延迟 ~22ms
  • P2P 直连,无需中转

适用场景

推荐使用:

  • ✅ 中小企业多办公点互联
  • ✅ 设备数量 < 100 台
  • ✅ 对延迟要求 < 50ms
  • ✅ 预算有限,追求性价比
  • ✅ 运维人员技术水平有限

不推荐使用:

  • ❌ 金融、医疗等强合规行业
  • ❌ 对延迟要求 < 5ms 的场景
  • ❌ 需要 99.99% SLA 保障
  • ❌ 大规模设备(>1000台)

实施清单

前期准备

  • 规划各办公点网段(避免冲突)
  • 注册 Tailscale 账号
  • 采购瘦客户机设备
  • 准备网线、电源等配件

部署步骤

  • 安装 Ubuntu Server 系统
  • 配置 SSH 密钥登录
  • 安装 Tailscale 客户端
  • 启用 IP 转发功能
  • 配置 Subnet 路由
  • 在控制台批准路由
  • 配置防火墙规则
  • 测试连通性

安全加固

  • 禁用密码登录
  • 配置 UFW 防火墙
  • 设置 Tailscale ACL
  • 禁用密钥过期
  • 定期检查设备状态

至此,一个低成本、高性能的异地组网方案就部署完成了。9个办公点的所有设备都可以通过统一的虚拟网络进行访问和管理,大大提升了运维效率。

下一篇文章,我将继续介绍基于 Tailscale 组网后,如何对设备进行状态监测,敬请期待!


相关资源